Обзор Авторских VB-сайтов

Сейчас я проведу обзор некоторых Авторских сайтов, посвящённых программированию на Visual Basic:

Yansoft: программы. Именно этот сайт является домашней страничкой нашего журнала! Поэтому всё изложенное ниже можешь считать наглой рекламой:
Примеры, исходники, статьи и конечно-же свежие номера VB-Forever! Также здесь вы можете найти программы (без исходников), которые написал автор этого сайта. Посети, не пожалеешь!!!
Автор: Хованский Ян

Уголок Visual Basic Интересен этот сайт, прежде всего своими исходниками и ActiveX компонентами. И самое главное всё тщательно прокомментированно. Также имеется несколько довольно интересных статей и FAQ.
Автор: Ковалев Сергей

Mik-Seite На этом сайте ты узнаешь всё о создании и использовании ActiveX компонентов. Кроме того имеется большое количество интересных статей, примеров, ActiveX конторолов. Must Read!
Автор: Эскин Михаил

Octal Здесь ты не найдёшь ни одной статьи... Но зато на этом сайте ты найдешь кучу исходников, исходники на все случаи жизни!!! Если тебе нужен какой-либо исходник, обязательно посети этот сайт!!!
Автор: Беляев Данила

 VBSwitch "огромное количество интереснейшей информации по Visual Basic" я так и не нашёл, количество материала - среднее, правда не все они авторские, часть из них написаны Данилой Беляевым. Но не смотря на это сайт не плохой и только развивается. И к тому же создаётся он человеком, учащимся в 9-том классе.
Автор: Клименко Данил

Владельцем VB сайтов
Если вы владелец сайта, посвящённому программированию на VB, пришлите мне адрес и описание вашего сайта и я опубликую информацию о нём в следующем номере журнала!

Автор обзора: Хованский Ян (Web: http://yansoft.by.ru)


Создаём оболочку для CD #2

Вступление

Поводом для написании этой статьи стало следующее, я очень люблю выступать на различных конференциях и конкурсах со своими программами. Программы свои, я записываю на CD-R болванку. И чтобы эффектнее представить программы, я создаю оболочку для CD и конечно же создаю её на своём любимом Visual Basic. Но существует одна проблема, все программы, написанные на Visual Basic требуют библиотеки msvbvm60.dll (для Visual Basic 6.0) и эта msvbvm60.dll есть не на каждом компьютере. Представьте себе такую ситуацию, вы засунули свой CD в компьютер, но вместо вашей оболочки появляется сообщение об ошибке. В данной статье я предлагаю способы решения данной проблемы.
Примечание: перечисленные ниже способы не тестировались на реальных CD, так что вы используете их на свой страх и риск.

Решение проблемы

Способ №1: Когда нет msvbvm60.dll

Если ваша оболочка не использует дополнительных элементов управления, то этот способ вам подходит.

1. Откройте блокнот и запишите туда следующее:

[autorun]
OPEN=autorun.exe

Сохраните текстовый файл как Autorun.inf

2. Теперь в корневом каталоге вашего CD обязательно должны быть файлы autorun.inf (ранее созданный текстовый файл), msvbvm60.dll (нужная библиотека), autorun.exe (созданная вами оболочка).

Теперь при открытии CD будет появится ваша оболочка, без всяких ошибок.
Если ваша программа нуждается не только в библиотеке msvbvm60.dll, но и дополнительных компонентах, то можете попробовать способ №2 или №3

Спасибо Гайдару Магданурову (vbstreets.ru)

Способ №2: Для любителей дополнительных контролов

1. Откройте блокнот и запишите туда следующее:

[autorun]
OPEN=setup.bat

Сохраните текстовый файл как Autorun.inf

2. Если вы закрыли блокнот откройте его, а если нет, создайте новый текстовый файл и запишите туда:

@Echo off
Rem регистрируем компонент
regsvr32 Имя вашего компонента /s
Rem чтобы зарегистрировать еще один компонент введите ещё одну строку: regsvr32 ИМЯ ВАШЕГО КОМПОНЕНТА /s и т.д.
autorun.exe

Сохраните текстовый файл как Setup.bat

3. Теперь в корневом каталоге вашего CD обязательно должны быть файлы autorun.inf (ранее созданный текстовый файл), msvbvm60.dll (нужная библиотека), autorun.exe (созданная вами оболочка), setup.bat (ранее созданный исполняемый файл DOS) и все ваши компоненты.

Теперь при открытии CD будут автоматически регистрироваться все необходимые компоненты, после этого будет запущена ваша оболочка.

Способ №3: С помощью специальной программы

1. Откройте блокнот и запишите туда следующее:

[autorun]
OPEN=autorun.exe

Сохраните текстовый файл как Autorun.inf

2. Вам понадобится программа, которая может дописать все ваши контролы и библиотеки в исполняемый файл, например: VB-PowerWrap

3. Далее дописываете, с помощью программы, все ваши контролы и библиотеки в исполняемый файл. В корневом каталоге вашего CD должны быть только два файла: autorun.inf и autorun.exe (оболочка).
Автор статьи: Хованский Ян (web: http://yansoft.by.ru)


FAQ

Частые вопросы и ответы на них

После выпуска первого журнала, в адрес редактора посыпалось большое количество вопросов, ответы получили почти все, кроме 3-ёх человек, ответов на их вопросы я попросту не знал...Также я отвечал в форуме сайта VBNet.ru (там я обитаю под ником Ян).
В основном вопросы были специфические, касающиеся конкретной программы, но были и действительно частые вопросы, ответы на них я и опубликую в этом номере:

Вопросы:

1. Как сделать чтобы textbox при вкл. Multiline, автоматом прокручивался вниз, чтобы показывалась последняя строчка?

2. Как отлавливать нажатия клавиатуры вне программы?

3. Как в программе вызвать окно e-mail, почтового клиента?

4. У меня вместо комментариев (в коде) отображается какая-то абракадбра. В чём дело?

5. Видел пример TransparentTaskBar, а как можно сделать прозрачными другие окна? И как находить ID окон (прим. ред. имеется ввиду идентификатор окна)?

6. Прочитал статью "Пишем говорящую программу", но у меня никак не получается, чтобы программа проговаривала русский текст и поменять голосовой движок. Как мне это сделать?

7. Вообщем так, есть ListBox, в каждой его строчке записано число. Как мне сосчитать сумму всех этих чисел?

8. Как программно открыть и закрыть лоток CD-Rom-a? И возможно ли это?

Ответы:

Как сделать чтобы textbox при вкл. Multiline, автоматом прокручивался вниз, чтобы показывалась последняя строчка?

Делается это так:

Private Sub Text1_Change() '// Text1 - имя текстового поля
Text1.SelStart = Len(Text1)
End Sub

Как отлавливать нажатия клавиатуры вне программы?

С помощью API функции GetAsyncKeyState:

Объявления:

'// Функция отлавливает нажатия клавиатуры вне программы
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Const VK_ESCAPE = &H1B '// Константа кнопки Escape, другие константы смотри в ApiViewer-e

Добавьте на форму Часы (Timer1). Установите Interval = 40.

Отлавливаем нажатие кнопки Escape:

Private Sub Timer1_Timer()
If GetAsyncKeyState(VK_ESCAPE) Then
MsgBox "Ты нажал Escape!"
End If
End Sub

Как в программе вызвать окно e-mail, почтового клиента?

Объявления:

'// Функция для открытия файлов любого формата

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long)

Const SW_SHOWNORMAL = 1 '// Константа задаёт состояние окна

Вызов окна e-mail:

Call ShellExecute(0&, "Open", "mailto:" + "E-Адрес" + "?Subject=" + "Тема" , "", "", SW_SHOWNORMAL)

У меня вместо комментариев (в коде) отображается какая-то абракадабра. В чём дело?

Нужно сделать следующее:

1. Откройте меню Tools|Options
2. Открылось окно настроек. Перейдите на вкладку "Editor Format"
3. Измените шрифт (Font) на тот, который поддерживает кириллицу (например, Courier New CYR)

Видел пример TransparentTaskBar, а как можно сделать прозрачными другие окна? И как находить ID окон (прим. ред. имеется ввиду идентификатор окна)?

Прочитайте следующие статьи:

http://yansoft.by.ru/vb/info/windows1.htm - Об окнах и манипуляторах

http://yansoft.by.ru/vb/info/transparent.htm - О прозрачности окон

Прочитал статью "Пишем говорящую программу", но у меня никак не получается, чтобы программа проговаривала русский текст и поменять голосовой движок. Как мне это сделать?

Специально для вас я написал пример: speaker.rar

Вообщем так, есть ListBox, в каждой его строчке записано число. Как мне сосчитать сумму всех этих чисел?

Просто:

Dim i, a
While List1.List(i) <> ""
a = a + CInt(List1.List(i))
i = i + 1
Wend
MsgBox a

Как программно открыть и закрыть лоток CD-Rom-a? И возможно ли это?

Возможно:

Объявления:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

'// Открываем лоток CD-ROM
mciSendString "Set CDAudio Door Open Wait", 0&, 0&, 0&

'// Закрываем лоток CD-ROM
mciSendString "Set CDAudio Door Closed Wait", 0&, 0&, 0&

На вопросы отвечал Хованский Ян (Web: http://yansoft.by.ru)


Пишем говорящую программу #2

Вступление

Сегодня мы продолжим писать говорящую программу, но на этот раз в нашей программе будет реализовано гораздо больше функций, нежели в программе из первой статьи. Итак, приступим.

Что нам понадобится?

Как и в первой статье нам понадобятся следующие компоненты:
1. Speech API - компонент, который позволяет программам работать с Text-to-speech engin`ами. Его можно бесплатно скачать на сайте Microsoft.
2. Text-to-speech engine (голосовой движок) - это набор файлов с описанием голоса. Позволяет синтезировать речь из текста. Существует много разных engin`ов различных производителей. Text-to-speech engin`ы отличаются качеством синтеза речи, количеством и характером голосов (мужчина, женщина, роботы), языком (русский, английский, французский, немецкий, ... ) и прочими параметрами.

Напоминаю, если вы счастливый обладатель Win2000/XP, эти компоненты у вас установлены, если нет, то придётся установить.

Начнём писать

1. Создайте новый проект.
2. На созданную вместе с проектом форму, добавьте список (lstEngine), две горизонтальные полосы прокрутки (hscSpeed и hscPitch), две опции (optVoice и optRecord), два текстовых поля (txtFileName и txtSpeak) и две кнопки (cmdSpeak и cmdExit), также можете добавить несколько меток, они будут заголовками для соответствующих элементов.
3. Добавьте новый компонент - Microsoft Direct Speech Synthesis (с изображением губ) и назовите его DirectSS.
4. Измените свойства элементов:

Название:
Свойство:
Значение:
optVoice | Caption | Проговаривать текст
optRecord | Caption | Записывать в файл
cmdSpeak | Caption | &Сказать
cmdExit | Caption | &Закрыть
DirectSS | Visible | False

5. Получившаяся форма должна выглядеть примерно так:

6. Добавьте следующий код:

При загрузке формы

Private Sub Form_Load()
On Error Resume Next 'Избежим ошибок
Dim vEngines As Integer
Dim Count As Integer
vEngines = DirectSS.CountEngines 'Получаем общее количество установленных голосовых движков

'Добавляем голосовые движки в список:
For Count = 1 To vEngines
lstEngine.AddItem DirectSS.ModeName(Count), Count - 1
lstEngine.ListIndex = 0
Next

'Обновляем свойства элементов
OptUpdate
End Sub

При выборе другого голосового движка

Private Sub lstEngine_Click()
On Error Resume Next 'Избежим ошибок
'При выборе нового движка обновим свойства элементов
DirectSS.Select (lstEngine.ListIndex + 1)
OptUpdate
End Sub

Выход
Private Sub cmdExit_Click()
End
End Sub

Проговариваем текст или записываем в файл

Private Sub cmdSpeak_Click()
On Error Resume Next 'Избежим ошибок

DirectSS.FileName = "" 'Чтобы не было ошибок

'Если выбрана опция записи в файл
If optRecord.Value = True Then
DirectSS.FileName = Trim(txtFileName) 'Задаём имя файла
End If

DirectSS.Select (lstEngine.ListIndex + 1) 'Задаём голосовой движок
DirectSS.Speed = hscSpeed.Value 'Задаём новую скорость
DirectSS.Pitch = hscPitch.Value 'Задаём тон
DirectSS.Speak txtSpeak.Text 'Проговорим текст
End Sub

Примечания:
1. Если будет выбрана опция "Записывать в файл", то компьютер не будет читать записываемый текст вслух.
2. Файл, в который записывается речь, должен иметь расширение *.wav

'Процедура обновления свойств элементов hscPitch и hscSpeed
Public Sub OptUpdate()
'Задаём свойства элементов:

hscPitch.Min = DirectSS.MinPitch
hscPitch.Max = DirectSS.MaxPitch

hscSpeed.Min = DirectSS.MinSpeed
hscSpeed.Max = DirectSS.MaxSpeed
End Sub

Примечание: вы наверное заметили, что в программе, при выборе нового голосового движка, мы обновляем свойства элементов hscPitch и hscSpeed, эти элементы регулируют скорость и тон произношения. Обновление необходимо для того, чтобы избежать ошибок, потому что каждый голосовой движок имеет свои свойства, т.е. максимальные и минимальные значения тона и скорости, у каждого движка разные.

Заключение

Всё! Программа создана! С помощью вертикальных полос прокрутки вы можете менять тон и скорость произношения. Также есть возможность записывать речь в файл, но как говорилось выше, записываемый текст компьютер вслух не читает.

Исходник: здесь

Автор статьи: Хованский Ян (web: http://yansoft.by.ru)


Первый офф-лайн журнал о Visual Basic. Выпуск #2

This page uses frames, but your browser doesn't support them.


Первый офф-лайн журнал о Visual Basic. Выпуск #2

VB - Forever!

Сайт журнала
 Главная страница
Загрузить другие выпуски

Статьи

WinApi
Окна и манипулятры ver 2.0
 Полупрозрачность окон

Распространение
Создаём оболочку для CD #2

Звук
Пишем говорящую программу #2

Для VB программиста
Обзор авторских VB-сайтов
Примеры

TransparentTaskBar
AntiStart
SelHTML
Speaker
Govorun
Mouse
MacMouse

FAQ
Часто задаваемые вопросы
Информация

Условия использования материалов
Написать письмо автору журнала
Посетить сайт журнала


Условия использования материалов

Автор статей не несёт никакой ответственности за возможные ошибки в статьях или примерах и за те моральные и физические увечья, которые вы или ваш компьютер можете получить, руководствуясь информацией, почёрпнутой из статей номера.
Вы имеете право разместить любую из статей номера на своём сайте, но перед этим предупредив автора статьи.

Хованский Ян (Редактор журнала)


Первый офф-лайн журнал о Visual Basic. Выпуск #2

Visual Basic Forever!

Hello World !!!

Перед вами второй номер офф-лайн журнала VB-Forever! В этом номере чуть меньше статей, чем было в выпуске #1, но зато примеры гораздо посложней и интересней. Самое главное - в этом номере опубликован полноценный FAQ, в котором 8 вопросов, и соотвественно 8 ответов на них. Надеюсь вам понравится!

Хованский Ян (Редактор журнала)

Сайт журнала Visual Basic Forever! : http://yansoft.by.ru
E-mail: yan@newmail.ru


Примеры!

Название: | Описание
TransparentTaskBar | Позволяет делать панель задач полупрозрачной, а также задавать степень прозрачности. Пример будет работать только в Win2000 и выше.
AntiStart | Программа прикол! Убегающая кнопка Пуск. Чтобы Пуск встала на своё место, нажмите Escape.
SelHTML | Подсветка тегов HTML в RichTextBox.
Speaker | Отличный пример работы с голосовыми движками. Есть возможность изменять скорость и тон
Govorun | Программа читает текст, используя голосовые движки. Есть возможность изменять скорость и тон чтения, а также возможность записывать речь в файл.
Mouse | Простой пример работы с мышью. Если мышь заходит за края экрана, то курсор появляется с другой стороны!
MacMouse | Все движения мышью записываются в файл, а потом воспроизводятся. Воспроизводятся только движения, а не клики мышью.


Полупрозрачность окон

Вступление

В этой статье я расскажу, как реализовать в своей программе полупрозрачность, да, именно полупрозрачность, а не прозрачность, о которой написано очень много. В данной статье вы узнаете как создавать полупрозрачные окна.
Примечание: примеры из статьи будут работать только в windows 2000 и выше.

Ну что начнём?

Сначала создадим процедуру, которая будет делать окно прозрачным по его манипулятор:
1. Создайте новый проект
2. Добавьте в проект новый модуль
3. Добавьте в модуль следующий код:

'API функции

'Функция определяет стиль окна
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long
'Функция задаёт стиль окна
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Функция делает окно прозрачным
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _
ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
'Константы
Public Const LWA_COLORKEY = &H1
Public Const LWA_ALPHA = &H2
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000

'Процедура

'hWnd - манипулятор окна, Layered - степень прозрачности от 0 до 255
Public Sub SetTransparent(hWnd As Long, Layered As Byte)
Dim Ret As Long
'Определяем стиль нужного окна
Ret = GetWindowLong(hWnd, GWL_EXSTYLE)
'Задаём стиль окна как заслоённый
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
'Задём степень прозрачности окна
SetLayeredWindowAttributes hWnd, 0, Layered, LWA_ALPHA
End Sub

4. Сохраните модуль под именем mdlTransparent.bas, проект можете не сохранять.

Всё! Процедура создана! Как ей пользоваться читайте дальше.

Примеры:

Пример №1: Полупрозрачная форма

Самый простой пример, требующий всего одной дополнительной строчки кода:
1. Создайте новый проект
2. Добавьте в проект модуль mdlTransparent.bas
3. На созданную вместе с проектом форму добавьте кнопку и текстовое поле
4. В событие Form_Load () вставьте следующий код:

SetTransparent Me.hWnd, 212

5. Запустите проект. Ну как? Красиво, не правда ли?

И самое главное - все контролы, которые находятся на форме также стали полупрозрачными.

Пример №2: Полупрозрачная панель задач

Этот пример будет немного посложнее:

1. Создайте новый проект
2. Добавьте в проект модуль mdlTransparent.bas
3. На созданную вместе с проектом форму добавьте метку и горизонтальную полосу прокрутки:

4. Измените свойства элементов:

Имя элемента управления:
Свойство:
Значение:
HScroll1
Min
0
HScroll1
Max
255
Label1
Caption
Степень прозрачности

5. Добавьте в модуль формы следующий код:

'Функция для поиска окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Манипулятор окна
Dim hnd As Long

Private Sub Form_Load()
'Ищем манипулятор панели задач
hnd = FindWindow("Shell_TrayWnd", vbNullString)
End Sub

Private Sub HScroll1_Change()
'Делаем панель задач полупрозрачной
SetTransparent hnd, 255 - HScroll1.Value
End Sub

Теперь панель задач полупрозрачная, с помощью горизонтальной полосы прокрутки вы можете задавать степень прозрачности.

И последнее: полупрозрачными, можно сделать только окна первого уровня. Т.е. нельзя сделать полупрозрачными дочерние окна, такие как кнопки, текстовые поля и т.д.

Остались вопросы пишите: yan@newmail.ru

Автор статьи: Хованский Ян (web: yansoft.by.ru)


Окна и манипуляторы ver 2.0

Вступление

В первом номере журнала вы уже познакомились с понятиями окно и манипулятор окна. Напоминаю: окно - это объект, занимающий прямоугольный участок экрана. Он может содержать другие окна, называемые дочерними. Манипулятор окна это способ идентификации окна в системе.
В этой статье мы продолжим изучать окна и их свойства.

Координаты и размеры окна

В данной статье вы узнаете, с помощью каких Api функций можно получить или поменять координаты и размер окна:

1. Получаем координаты и размер окна:

'Функция для получения координат и размера окна
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
'Необходимые структуры
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Left As Long 'Координата X верхнего левого угла
Top As Long 'Координата Y верхнего левого угла
Right As Long 'Координата X нижнего правого угла
Bottom As Long 'Координата Y нижнего правого угла
End Type
Private Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
ptMinPosition As POINTAPI 'Координаты окна в свёрнутом состоянии
ptMaxPosition As POINTAPI 'Координаты окна в развёрнутом состоянии
rcNormalPosition As RECT 'Координаты окна в нормальном состоянии
End Type

Использование:

Dim ord As WINDOWPLACEMENT
GetWindowPlacement Me.hwnd, ord
MsgBox "Form.Left = " & ord.rcNormalPosition.Left & " Form.Top = " & ord.rcNormalPosition.Top
'ord.rcNormalPosition.Left и ord.rcNormalPosition.Top описывают местонахождение верхнево левого угла окна.
В данном примере выдаётся диалоговое окно о текущем положении формы. Выдаётся оно в пикселях, чтобы это справить и перевести в твипы, нужно
ord.rcNormalPosition.Left и ord.rcNormalPosition.Top, в данном примере умножить на 15 (Твип равен 1/15 пикселя). Вот так:
MsgBox "Form.Left = " & ord.rcNormalPosition.Left * 15 & " Form.Top = " & ord.rcNormalPosition.Top * 15
Теперь мы увидим координаты формы в пикселях.
Размеры окна можно рассчитать так:
Dim vHeight, vWidth
vHeight = (ord.rcNormalPosition.Bottom - ord.rcNormalPosition.Top) * 15 'Высота - Height
vWidth = (ord.rcNormalPosition.Right - ord.rcNormalPosition.Left ) * 15 'Ширина - Width
Таким образом, мы можем определить координаты и размеры любого окна в системе.

2. Меняем координаты и размер окна:

'Функция для изменения координат и размера окна
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Необходимые константы
Const SWP_NOSIZE = &H1 'Сохранить текущие размеры
Const SWP_NOMOVE = &H2 'Сохранить текущее положение

Использование:

1. Изменяем координаты окна
SetWindowPos Me.hwnd, 0, 100, 200, 0, 0, SWP_NOSIZE 'Меняем координаты формы на (100, 200)

2. Изменяем размеры окна
SetWindowPos Me.hwnd, 0, 0, 0, 233, 345 , SWP_NOSIZE 'Меняем координаты размеры формы на Width = 233, Height = 345

3. Изменяем размеры и координаты окна
SetWindowPos Me.hwnd, 0, 100, 200, 233, 345 , 0

Теперь вы можете изменять размеры и координаты любого окна в системе.
Автор статьи: Хованский Ян (web: yansoft.by.ru)